home *** CD-ROM | disk | FTP | other *** search
Wrap
SSSSGGGGEEEEMMMMMMMM((((3333SSSS)))) SSSSGGGGEEEEMMMMMMMM((((3333SSSS)))) NNNNAAAAMMMMEEEE SSSSGGGGEEEEMMMMMMMM, DDDDGGGGEEEEMMMMMMMM, CCCCGGGGEEEEMMMMMMMM, ZZZZGGGGEEEEMMMMMMMM - Multiplies a real or complex general matrix by a real or complex general matrix SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS Single precision Fortran: CCCCAAAALLLLLLLL SSSSGGGGEEEEMMMMMMMM ((((_t_r_a_n_s_a,,,, _t_r_a_n_s_b,,,, _m,,,, _n,,,, _k,,,, _a_l_p_h_a,,,, _a,,,, _l_d_a,,,, _b,,,, _l_d_b,,,, _b_e_t_a,,,, _c,,,, _l_d_c)))) C/C++: ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____bbbbllllaaaassss....hhhh>>>> vvvvooooiiiidddd ssssggggeeeemmmmmmmm ((((cccchhhhaaaarrrr *_t_r_a_n_s_a,,,, cccchhhhaaaarrrr *_t_r_a_n_s_b,,,, iiiinnnntttt _m,,,, iiiinnnntttt _n,,,, iiiinnnntttt _k,,,, ffffllllooooaaaatttt _a_l_p_h_a,,,, ffffllllooooaaaatttt *_a,,,, iiiinnnntttt _l_d_a,,,, ffffllllooooaaaatttt *_b,,,, iiiinnnntttt _l_d_b,,,, ffffllllooooaaaatttt _b_e_t_a,,,, ffffllllooooaaaatttt *_c,,,, iiiinnnntttt _l_d_c))));;;; Double precision Fortran: CCCCAAAALLLLLLLL DDDDGGGGEEEEMMMMMMMM ((((_t_r_a_n_s_a,,,, _t_r_a_n_s_b,,,, _m,,,, _n,,,, _k,,,, _a_l_p_h_a,,,, _a,,,, _l_d_a,,,, _b,,,, _l_d_b,,,, _b_e_t_a,,,, _c,,,, _l_d_c)))) C/C++: ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____bbbbllllaaaassss....hhhh>>>> vvvvooooiiiidddd ddddggggeeeemmmmmmmm ((((cccchhhhaaaarrrr *_t_r_a_n_s_a,,,, cccchhhhaaaarrrr *_t_r_a_n_s_b,,,, iiiinnnntttt _m,,,, iiiinnnntttt _n,,,, iiiinnnntttt _k,,,, ddddoooouuuubbbblllleeee _a_l_p_h_a,,,, ddddoooouuuubbbblllleeee *_a,,,, iiiinnnntttt _l_d_a,,,, ddddoooouuuubbbblllleeee *_b,,,, iiiinnnntttt _l_d_b,,,, ddddoooouuuubbbblllleeee _b_e_t_a,,,, ddddoooouuuubbbblllleeee *_c,,,, iiiinnnntttt _l_d_c); Single precision complex Fortran: CCCCAAAALLLLLLLL CCCCGGGGEEEEMMMMMMMM ((((_t_r_a_n_s_a,,,, _t_r_a_n_s_b,,,, _m,,,, _n,,,, _k,,,, _a_l_p_h_a,,,, _a,,,, _l_d_a,,,, _b,,,, _l_d_b,,,, _b_e_t_a,,,, _c,,,, _l_d_c)))) C/C++: ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____bbbbllllaaaassss....hhhh>>>> vvvvooooiiiidddd ccccggggeeeemmmmmmmm ((((cccchhhhaaaarrrr *_t_r_a_n_s_a,,,, cccchhhhaaaarrrr *_t_r_a_n_s_b,,,, iiiinnnntttt _m,,,, iiiinnnntttt _n,,,, iiiinnnntttt _k,,,, ssssccccssssllll____ccccoooommmmpppplllleeeexxxx *_a_l_p_h_a,,,, ssssccccssssllll____ccccoooommmmpppplllleeeexxxx *_a,,,, iiiinnnntttt _l_d_a,,,, ssssccccssssllll____ccccoooommmmpppplllleeeexxxx *_b,,,, iiiinnnntttt _l_d_b,,,, ssssccccssssllll____ccccoooommmmpppplllleeeexxxx *_b_e_t_a,,,, ssssccccssssllll____ccccoooommmmpppplllleeeexxxx *_c,,,, iiiinnnntttt llllddddcccc); C++ STL: ####iiiinnnncccclllluuuuddddeeee <<<<ccccoooommmmpppplllleeeexxxx....hhhh>>>> ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____bbbbllllaaaassss....hhhh>>>> vvvvooooiiiidddd ccccggggeeeemmmmmmmm ((((cccchhhhaaaarrrr *_t_r_a_n_s_a,,,, cccchhhhaaaarrrr *_t_r_a_n_s_b,,,, iiiinnnntttt _m,,,, iiiinnnntttt _n,,,, iiiinnnntttt _k,,,, ccccoooommmmpppplllleeeexxxx<<<<ffffllllooooaaaatttt>>>> *_a_l_p_h_a,,,, ccccoooommmmpppplllleeeexxxx<<<<ffffllllooooaaaatttt>>>> *_a,,,, iiiinnnntttt _l_d_a,,,, ccccoooommmmpppplllleeeexxxx<<<<ffffllllooooaaaatttt>>>> *_b,,,, iiiinnnntttt _l_d_b,,,, ccccoooommmmpppplllleeeexxxx<<<<ffffllllooooaaaatttt>>>> *_b_e_t_a,,,, ccccoooommmmpppplllleeeexxxx<<<<ffffllllooooaaaatttt>>>> *_c,,,, iiiinnnntttt _l_d_c))));;;; PPPPaaaaggggeeee 1111 SSSSGGGGEEEEMMMMMMMM((((3333SSSS)))) SSSSGGGGEEEEMMMMMMMM((((3333SSSS)))) Double precision complex Fortran: CCCCAAAALLLLLLLL ZZZZGGGGEEEEMMMMMMMM ((((_t_r_a_n_s_a,,,, _t_r_a_n_s_b,,,, _m,,,, _n,,,, _k,,,, _a_l_p_h_a,,,, _a,,,, _l_d_a,,,, _b,,,, _l_d_b,,,, _b_e_t_a,,,, _c,,,, _l_d_c)))) C/C++: ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____bbbbllllaaaassss....hhhh>>>> vvvvooooiiiidddd zzzzggggeeeemmmmmmmm ((((cccchhhhaaaarrrr *_t_r_a_n_s_a,,,, cccchhhhaaaarrrr *_t_r_a_n_s_b,,,, iiiinnnntttt _m,,,, iiiinnnntttt _n,,,, iiiinnnntttt _k,,,, ssssccccssssllll____zzzzoooommmmpppplllleeeexxxx *_a_l_p_h_a,,,, ssssccccssssllll____zzzzoooommmmpppplllleeeexxxx *_a,,,, iiiinnnntttt _l_d_a,,,, ssssccccssssllll____zzzzoooommmmpppplllleeeexxxx *_b,,,, iiiinnnntttt _l_d_b,,,, ssssccccssssllll____zzzzoooommmmpppplllleeeexxxx *_b_e_t_a,,,, ssssccccssssllll____zzzzoooommmmpppplllleeeexxxx *_c,,,, iiiinnnntttt _l_d_c))));;;; C++ STL: ####iiiinnnncccclllluuuuddddeeee <<<<ccccoooommmmpppplllleeeexxxx....hhhh>>>> ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____bbbbllllaaaassss....hhhh>>>> vvvvooooiiiidddd zzzzggggeeeemmmmmmmm ((((cccchhhhaaaarrrr *_t_r_a_n_s_a,,,, cccchhhhaaaarrrr *_t_r_a_n_s_b,,,, iiiinnnntttt _m,,,, iiiinnnntttt _n,,,, iiiinnnntttt _k,,,, ccccoooommmmpppplllleeeexxxx<<<<ddddoooouuuubbbblllleeee>>>> *_a_l_p_h_a,,,, ccccoooommmmpppplllleeeexxxx<<<<ddddoooouuuubbbblllleeee>>>> *_a,,,, iiiinnnntttt _l_d_a,,,, ccccoooommmmpppplllleeeexxxx<<<<ddddoooouuuubbbblllleeee>>>> *_b,,,, iiiinnnntttt _l_d_b,,,, ccccoooommmmpppplllleeeexxxx<<<<ddddoooouuuubbbblllleeee>>>> *_b_e_t_a,,,, ccccoooommmmpppplllleeeexxxx<<<<ddddoooouuuubbbblllleeee>>>> *_c,,,, iiiinnnntttt _l_d_c))));;;; IIIIMMMMPPPPLLLLEEEEMMMMEEEENNNNTTTTAAAATTTTIIIIOOOONNNN These routines are part of the SCSL Scientific Library and can be loaded using either the ----llllssssccccssss or the ----llllssssccccssss____mmmmpppp option. The ----llllssssccccssss____mmmmpppp option directs the linker to use the multi-processor version of the library. When linking to SCSL with ----llllssssccccssss or ----llllssssccccssss____mmmmpppp, the default integer size is 4 bytes (32 bits). Another version of SCSL is available in which integers are 8 bytes (64 bits). This version allows the user access to larger memory sizes and helps when porting legacy Cray codes. It can be loaded by using the ----llllssssccccssss____iiii8888 option or the ----llllssssccccssss____iiii8888____mmmmpppp option. A program may use only one of the two versions; 4-byte integer and 8-byte integer library calls cannot be mixed. The C and C++ prototypes shown above are appropriate for the 4-byte integer version of SCSL. When using the 8-byte integer version, the variables of type iiiinnnntttt become lllloooonnnngggg lllloooonnnngggg and the <<<<ssssccccssssllll____bbbbllllaaaassss____iiii8888....hhhh>>>> header file should be included. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN SSSSGGGGEEEEMMMMMMMM and DDDDGGGGEEEEMMMMMMMM multiply a real general matrix by a real general matrix. CCCCGGGGEEEEMMMMMMMM and ZZZZGGGGEEEEMMMMMMMM multiply a complex general matrix by a complex general matrix. These routines perform one of the matrix-matrix operations: _C <- _a_l_p_h_a _o_p(_A) _o_p(_B) + _b_e_t_a _C where _o_p(_X) is one of the following: PPPPaaaaggggeeee 2222 SSSSGGGGEEEEMMMMMMMM((((3333SSSS)))) SSSSGGGGEEEEMMMMMMMM((((3333SSSS)))) _o_p(_X) = _X _o_p(_X) = _X_T _o_p(_X) = _X_H (CCCCGGGGEEEEMMMMMMMM and ZZZZGGGGEEEEMMMMMMMM only) where * _a_l_p_h_a and _b_e_t_a are scalars * _A, _B, and _C are matrices * _o_p(_A) is an _m-by-_k matrix * _o_p(_B) is a _k-by-_n matrix * _C is an _m-by-_n matrix. * _X _T is the transpose of _x * _X_H is the conjugate transpose of _X. See the NOTES section of this man page for information about the interpretation of the data types described in the following arguments. These routines have the following arguments: _t_r_a_n_s_a Character. (input) Specifies the form of oooopppp((((AAAA)))) to be used in the matrix multiplication, as follows: _t_r_a_n_s_a = 'N' or 'n': _o_p(_A) = _A _t_r_a_n_s_a = 'T' or 't': _o_p(_A) = _A _T _t_r_a_n_s_a = 'C' or 'c': _o_p(_A) = _A _T (SSSSGGGGEEEEMMMMMMMM and DDDDGGGGEEEEMMMMMMMM), or _o_p(_A) = _A_H (CCCCGGGGEEEEMMMMMMMM and ZZZZGGGGEEEEMMMMMMMM) For C/C++, a pointer to this character is passed. _t_r_a_n_s_b Character. (input) Specifies the form of _o_p(_B) to be used in the matrix multiplication, as follows: _t_r_a_n_s_b = 'N' or 'n': _o_p(_B) = _B _t_r_a_n_s_b = 'T' or 't': _o_p(_B) = _B_T _t_r_a_n_s_b = 'C' or 'c': _o_p(_B) = _B_T (SSSSGGGGEEEEMMMMMMMM and DDDDGGGGEEEEMMMMMMMM), or _o_p(_B) = _B_H (CCCCGGGGEEEEMMMMMMMM and ZZZZGGGGEEEEMMMMMMMM) PPPPaaaaggggeeee 3333 SSSSGGGGEEEEMMMMMMMM((((3333SSSS)))) SSSSGGGGEEEEMMMMMMMM((((3333SSSS)))) For C/C++, a pointer to this character is passed. _m Integer. (input) Specifies the number of rows in matrix _o_p(_A) and in matrix _C. _m must be >= 0. _n Integer. (input) Specifies the number of columns in matrix _o_p(_B) and in matrix _C. _n must be >= 0. _k Integer. (input) Specifies the number of columns of matrix _o_p(_A) and the number of rows of matrix _o_p(_B). _k must be >= 0. _a_l_p_h_a First scalar factor. (input) SSSSGGGGEEEEMMMMMMMM: Single precision. DDDDGGGGEEEEMMMMMMMM: Double precision. CCCCGGGGEEEEMMMMMMMM: Single precision complex. ZZZZGGGGEEEEMMMMMMMM: Double precision complex. For C/C++, a pointer to this scalar is passed when alpha is complex; otherwise, alpha is passed by value. _a Array of dimension (_l_d_a,_k_a). (input) SSSSGGGGEEEEMMMMMMMM: Single precision array. DDDDGGGGEEEEMMMMMMMM: Double precision array. CCCCGGGGEEEEMMMMMMMM: Single precision complex array. ZZZZGGGGEEEEMMMMMMMM: Double precision complex array. When _t_r_a_n_s_a = 'N' or 'n', _k_a is _k; otherwise, it is _m. Contains the matrix _A. Before entry with _t_r_a_n_s_a = 'N' or 'n', the leading _m-by-_k part of array _a must contain matrix _A; otherwise, the leading _k-by-_m part of array _a must contain matrix _A. _l_d_a Integer. (input) Specifies the first dimension of _a as declared in the calling program. When _t_r_a_n_s_a = 'N' or 'n', _l_d_a >= MMMMAAAAXXXX(1,_m); otherwise, _l_d_a >= MMMMAAAAXXXX(1,_k). _b Array of dimension (_l_d_b,_k_b). (input) SSSSGGGGEEEEMMMMMMMM: Single precision array. DDDDGGGGEEEEMMMMMMMM: Double precision array. CCCCGGGGEEEEMMMMMMMM: Single precision complex array. ZZZZGGGGEEEEMMMMMMMM: Double precision complex array. When _t_r_a_n_s_b = 'N' or 'n', _k_b is _n; otherwise, it is _k. Contains the matrix _B. Before entry with _t_r_a_n_s_b = 'N' or 'n', the leading _k-by-_n part of array _b must contain matrix _B; otherwise, the leading _n-by-_k part of array _b must contain matrix _B. PPPPaaaaggggeeee 4444 SSSSGGGGEEEEMMMMMMMM((((3333SSSS)))) SSSSGGGGEEEEMMMMMMMM((((3333SSSS)))) _l_d_b Integer. (input) Specifies the first dimension of _b as declared in the calling program. When _t_r_a_n_s_b = 'N' or 'n', _l_d_b >= MMMMAAAAXXXX(1,_k); otherwise, _l_d_b >= MMMMAAAAXXXX(1,_n). _b_e_t_a Scalar factor. (input) SSSSGGGGEEEEMMMMMMMM: Single precision. DDDDGGGGEEEEMMMMMMMM: Double precision. CCCCGGGGEEEEMMMMMMMM: Single precision complex. ZZZZGGGGEEEEMMMMMMMM: Double precision complex. When _b_e_t_a is supplied as 0, _c need not be set on input. For C/C++, a pointer to this scalar is passed when beta is complex; otherwise, beta is passed by value. _c Array of dimension (_l_d_c,_n). (input and output) SSSSGGGGEEEEMMMMMMMM: Single precision array. DDDDGGGGEEEEMMMMMMMM: Double precision array. CCCCGGGGEEEEMMMMMMMM: Single precision complex array. ZZZZGGGGEEEEMMMMMMMM: Double precision complex array. Contains the matrix _C. Before entry, the leading _m-by-_n part of array _c must contain matrix _C, except when _b_e_t_a is 0; in which case, _c need not be set. On exit, the _m-by-_n result matrix overwrites array _c. _l_d_c Integer. (input) Specifies the first dimension of _c as declared in the calling program. _l_d_c >= MMMMAAAAXXXX(1,_m). NNNNOOOOTTTTEEEESSSS These routines are Level 3 Basic Linear Algebra Subprograms (Level 3 BLAS). DDDDaaaattttaaaa TTTTyyyyppppeeeessss The following data types are described in this documentation: TTTTeeeerrrrmmmm UUUUsssseeeedddd DDDDaaaattttaaaa ttttyyyyppppeeee Fortran: Array dimensioned _n xxxx((((nnnn)))) Array of dimensions (_m,_n) xxxx((((mmmm,,,,nnnn)))) Character CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR Integer IIIINNNNTTTTEEEEGGGGEEEERRRR (IIIINNNNTTTTEEEEGGGGEEEERRRR****8888 for ----llllssssccccssss____iiii8888[[[[____mmmmpppp]]]]) PPPPaaaaggggeeee 5555 SSSSGGGGEEEEMMMMMMMM((((3333SSSS)))) SSSSGGGGEEEEMMMMMMMM((((3333SSSS)))) Single precision RRRREEEEAAAALLLL Double precision DDDDOOOOUUUUBBBBLLLLEEEE PPPPRRRREEEECCCCIIIISSSSIIIIOOOONNNN Single precision complex CCCCOOOOMMMMPPPPLLLLEEEEXXXX Double precision complex DDDDOOOOUUUUBBBBLLLLEEEE CCCCOOOOMMMMPPPPLLLLEEEEXXXX C/C++: Array dimensioned _n xxxx[[[[_n]]]] Array of dimensions (_m,_n) xxxx[[[[mmmm****nnnn]]]] Character cccchhhhaaaarrrr Integer iiiinnnntttt (lllloooonnnngggg lllloooonnnngggg for ----llllssssccccssss____iiii8888[[[[____mmmmpppp]]]]) Single precision ffffllllooooaaaatttt Double precision ddddoooouuuubbbblllleeee Single precision complex ssssccccssssllll____ccccoooommmmpppplllleeeexxxx Double precision complex ssssccccssssllll____zzzzoooommmmpppplllleeeexxxx C++ STL: Array dimensioned _n xxxx[[[[_n]]]] Array of dimensions (_m,_n) xxxx[[[[mmmm****nnnn]]]] Character cccchhhhaaaarrrr Integer iiiinnnntttt (lllloooonnnngggg lllloooonnnngggg for ----llllssssccccssss____iiii8888[[[[____mmmmpppp]]]]) Single precision ffffllllooooaaaatttt Double precision ddddoooouuuubbbblllleeee Single precision complex ccccoooommmmpppplllleeeexxxx<<<<ffffllllooooaaaatttt>>>> Double precision complex ccccoooommmmpppplllleeeexxxx<<<<ddddoooouuuubbbblllleeee>>>> Note that you can explicitly declare multidimensional C/C++ arrays provided that the array dimensions are swapped with respect to the Fortran declaration (e.g., xxxx[[[[nnnn]]]][[[[mmmm]]]] in C/C++ versus xxxx((((mmmm,,,,nnnn)))) in Fortran). To avoid a compiler type mismatch error in C++ (or a compiler warning message in C), however, the array should be cast to a pointer of the appropriate type when passed as an argument to a SCSL routine. PPPPaaaaggggeeee 6666 SSSSGGGGEEEEMMMMMMMM((((3333SSSS)))) SSSSGGGGEEEEMMMMMMMM((((3333SSSS)))) SSSSEEEEEEEE AAAALLLLSSSSOOOO DDDDGGGGEEEEMMMMMMMMSSSS(3S) to multiply general matrices by using Strassen's algorithm IIIINNNNTTTTRRRROOOO____SSSSCCCCSSSSLLLL(3S), IIIINNNNTTTTRRRROOOO____BBBBLLLLAAAASSSS3333(3S) IIIINNNNTTTTRRRROOOO____CCCCBBBBLLLLAAAASSSS(3S) for information about using the C interface to Fortran 77 Basic Linear Algebra Subprograms (legacy BLAS) set forth by the Basic Linear Algebra Subprograms Technical Forum. PPPPaaaaggggeeee 7777